// Token验证工具函数
import { showErrorMessage } from './message'

interface DecodedToken {
    exp: number
    userId: string
    username: string
    type: string
    [key: string]: any
}

// 全局router实例
let globalRouter: any = null

// 设置全局router实例
export function setGlobalRouter(router: any) {
    globalRouter = router
}

// 解析JWT token（不验证签名，只解析payload）
export function parseJwt(token: string): DecodedToken | null {
    try {
        const base64Url = token.split('.')[1]
        const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
        const jsonPayload = decodeURIComponent(
            atob(base64)
                .split('')
                .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
                .join('')
        )
        return JSON.parse(jsonPayload)
    } catch (error) {
        console.error('Token解析失败:', error)
        return null
    }
}

// 检查token是否过期
export function isTokenExpired(token: string): boolean {
    const decoded = parseJwt(token)
    if (!decoded) return true

    const currentTime = Date.now() / 1000
    return decoded.exp < currentTime
}

// 获取token过期时间
export function getTokenExpirationTime(token: string): number | null {
    const decoded = parseJwt(token)
    return decoded ? decoded.exp : null
}

// 获取token剩余有效时间（秒）
export function getTokenRemainingTime(token: string): number {
    const decoded = parseJwt(token)
    if (!decoded) return 0

    const currentTime = Date.now() / 1000
    return Math.max(0, decoded.exp - currentTime)
}

// 定时检查token过期状态
let tokenCheckInterval: number | null = null

export function startTokenExpirationCheck() {
    // 清除之前的定时器
    if (tokenCheckInterval) {
        clearInterval(tokenCheckInterval)
    }

    // 每秒检查一次token状态
    tokenCheckInterval = setInterval(() => {
        const accessToken = localStorage.getItem('hospital-access-token')
        const refreshToken = localStorage.getItem('hospital-refresh-token')

        if (!accessToken || !refreshToken) {
            return
        }

        // 检查refresh token是否过期
        const isRefreshTokenExpired = isTokenExpired(refreshToken)

        if (isRefreshTokenExpired) {
            // refresh token过期，清除登录状态并跳转
            clearInterval(tokenCheckInterval!)
            tokenCheckInterval = null

            // 清除localStorage
            localStorage.removeItem('hospital-access-token')
            localStorage.removeItem('hospital-refresh-token')

            // 显示提示并跳转
            if (window.location.pathname !== '/login') {
                // 显示错误提示
                showErrorMessage('登录已过期，请重新登录')

                // 使用router跳转
                if (globalRouter) {
                    globalRouter.push('/login')
                } else {
                    window.location.href = '/login'
                }
            }
        }
    }, 1000) // 每秒检查一次
}

export function stopTokenExpirationCheck() {
    if (tokenCheckInterval) {
        clearInterval(tokenCheckInterval)
        tokenCheckInterval = null
    }
} 